//
// Created by vic99 on 2024/6/14.
//

#ifndef KOTLINSTUDY_SMART_LIB_H
#define KOTLINSTUDY_SMART_LIB_H

#include <iostream>
#include <memory>

class MyClass {
public:
    MyClass(int value) : value_(value) {}
    ~MyClass() { std::cout << "Deleting MyClass with value " << value_ << std::endl; }

    int getValue() const { return value_; }

private:
    int value_;
};

int main() {
    // 使用 std::unique_ptr
    std::unique_ptr<MyClass> ptr1(new MyClass(10));
    std::cout << "ptr1 value: " << ptr1->getValue() << std::endl;
    // ptr1.reset(); // 如果取消注释，会输出 "Deleting MyClass with value 10"

    // 使用 std::shared_ptr
    std::shared_ptr<MyClass> ptr2(new MyClass(20));
    std::shared_ptr<MyClass> ptr3 = ptr2; // ptr2 和 ptr3 共享所有权
    std::cout << "ptr2 value: " << ptr2->getValue() << std::endl;
    std::cout << "ptr3 value: " << ptr3->getValue() << std::endl;
    // 当 ptr2 和 ptr3 都超出作用域时，MyClass 的实例才会被删除

    return 0;
}
#endif //KOTLINSTUDY_SMART_LIB_H
